#include <unistd.h>
#include <stdio.h>

int main(int argc, char const *argv[])
{
    fork();
    fork();
    printf( "pid %d, ppid %d\n", getpid(), getppid() );
    sleep(1);  // 不加 sleep, 显示结果会不同.  

    return 0;
}


/*
知识要点
    此程序执行结束后, 一共存在 4 个进程.

    进程一 (未执行fork)
    进程一 (执行完第一个fork)                                        生成进程二 (从执行完第一个fork之后开始)
    进程一 (执行完第二个fork)  生成进程三 (从执行完第二个fork之后开始)    进程二 (执行完第二个fork)     生成进程四 (从执行完第二个fork之后开始)

知识要点:
    如果不加 sleep , 有有可能父进程在子进程还没有打印之前就先结束, 
    此时 子进程 成为 孤儿进程, 将被系统守护进程收养, 所以 PPID 将成为 系统进程.

    命令 ps -aux | grep a.out
    如果没有加 sleep(1), 可以看到 a.out的状态为 R+, 前台在运行状态的进程
    如果   加 sleep(1), 可以看到 a.out的状态为 S+, 表示这是一个前台休眠状态的进程

    命令 pstree -sp pid
    查看进程树
    

*/